#include <iostream>
#include <unistd.h>
#include <signal.h>
using namespace std;

void handler(int signo)
{
    cout<< "I get signo"<< signo << endl;
    exit(1);
}


void printsigPending(const sigset_t& set)
{
    for(int i = 1;i<32;i++)
    {
        if(sigismember(&set,i))
        {
            cout<< "1";
        }
        else
        {
            cout<<"0";
        }
    }
    cout<<endl;
}

int main()
{   
    //自定义2号信号处理函数
    signal(2,handler);

    //使用sigprocmask设置屏蔽
    sigset_t set,oldset;
    sigemptyset(&set);
    sigemptyset(&oldset);
    sigaddset(&set,2);
    sigprocmask(SIG_SETMASK,&set,&oldset);

    //使用sigpending打印pending表
    //获取
    int i = 0;
    while(true)
    {
        sigset_t pending;
        sigpending(&pending);
        printsigPending(pending);

        if(i == 5)
        {
            sigset_t reset;
            sigemptyset(&reset);
            sigprocmask(SIG_SETMASK,&reset,nullptr);
        }
        i++;
        sleep(1);
    }    
    return 0;
}